package com.mezz.bones.framework.core.annotation;

import java.lang.annotation.*;

/**
 * 防重复提交注解
 * 重复提交key生成规则:
 * userId 当前登录ID如果没有登录则为"anno"
 * path 当前请求路径
 * requestId 如果有自定义请求ID 则直接使用(bizParam不参与key生成) 且支持spel表达式
 * bizParam(可选)  usePathOnly开关 默认为false 有requestId时 key不拼接业务参数
 */
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RepeatSubmit {

  //重复请求时间(单位秒)
  int value() default 2;

  RequestIdentifierStrategy uniqueRequestIdentifier() default RequestIdentifierStrategy.PATH_AND_PARAMS;

  String customKey() default "";


  /**
   * 锁键生成策略枚举
   */
  enum RequestIdentifierStrategy {

    /**
     * 使用自定义（支持SpEL表达式）。
     */
    CUSTOM,

    /**
     * 仅基于请求路径生成锁键（忽略请求参数）。
     */
    PATH_ONLY,

    /**
     * 基于请求路径和业务参数生成锁键。
     */
    PATH_AND_PARAMS

  }
}
